package controllers;

import java.util.Date;
import java.util.List;
import java.util.Vector;

import business.interfaces.ICliente;
import business.interfaces.ISocio;
import business.services.IServicioClientes;
import business.services.ServiceException;
import business.services.ServicioClientes;

public class SociosController implements IErrorObservable {
	private List<IErrorObserver> observers;
	private IServicioClientes servicioClientes;
	
	public SociosController() {
		this.observers = new Vector<IErrorObserver>();
		this.servicioClientes = new ServicioClientes();
	}
	
	public List<ISocio> getSocios() {
		List<ISocio> socios = null;
		try {
			socios = servicioClientes.getSocios();
		} catch (ServiceException e) {
			this.notificarErrorObservers(e.getMessage());
		}
		
		return socios;
	}
	
	public boolean guardarSocio(String dni, String nombre, Date fechaNac,
			String domicilio, String telefono, String email)
	{
		boolean guardaSocio = true;
		try {
			this.servicioClientes.registrarSocio(dni, nombre, fechaNac, domicilio, telefono, email);
		} catch (ServiceException e) {
			guardaSocio = false;
			this.notificarErrorObservers(e.getMessage());
		}
		
		return guardaSocio;
	}
	
	public ISocio cargarSocio(String dni) {
		ISocio socio = null;
		
		try {
			socio = this.servicioClientes.getSocio(dni);
		} catch (ServiceException e) {
			this.notificarErrorObservers(e.getMessage());
		}
		
		return socio;
	}

	public List<IErrorObserver> getErrorObservers() {
		return this.observers;
	}

	public void agregarErrorObserver(IErrorObserver observer) {
		this.observers.add(observer);
	}

	public void removerErrorObserver(IErrorObserver observer) {
		this.observers.remove(observer);
	}

	public void notificarErrorObservers(String error) {
		for(IErrorObserver observer : this.observers) {
			observer.notificarError(error);
		}
	}
}
